#ifndef CABECERAHASHING_H_
#define CABECERAHASHING_H_

#include <stdexcept>
#include "../BloqArch/IHeader.h"
#include "TablaHash.h"
#include "BloqueHash.h"
#include "RegistroHash.h"


class CabeceraHashing: public IHeader {
private:
	TablaHash _tabDispersion;
	
public:
	CabeceraHashing();
	virtual ~CabeceraHashing();
	
	// Dado un registro devuelve la posición del bloque al que pertenece
	unsigned int getPosBloque(const RegistroHash& reg) const;

	// Señala que el registro ocacionó overflow en el bloque y la posicion del nuevo bloque
	void overflowBloque(const RegistroHash& regOver, const BloqueHash& bloque, unsigned int posNewBloque);

	// IHeader
	unsigned int getPosBloqueLibre();
	
	// IBloque
	unsigned int serialize(char* &arr);
	void deSerialize(char* arr);
};

#endif /* CABECERAHASHING_H_ */
